/**
 * 版权所有:版权所有(C) 2020，卓信科技
 * 系统名称:FOL
 * 文件名称:SmsUtil.java
 * 模块名称:TODO(这里请补充模块名称)
 * 创建日期:2020年5月19日
 * 作        者:Baisong
 * 内容摘要:TODO(这里请补充详细的描述信息)
 */

package com.zx.sframe.util.sms;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import com.google.gson.Gson;
import com.zx.emanage.util.gen.GlobalVal;

/**
 * 类  名  称:SmsUtil
 * 内容摘要:TODO(这里详细描述这个类的作用)
 * 作        者:Baisong
 */
public class SmsUtil
{

    /**模板编号*/
    /***/
    public final static String TPLID_REPAY_CODE_TYPE = "2893";

    /**
     *
     * @Title: sendSMS
     * @Description: 发送短信公共方法
     * @param sms
     * @return 0 发送失败 1发送成功 
     * @author: Guanxu
     * @time:2017年12月14日 上午11:44:29
     * history:
     * 1、2017年12月14日 Guanxu 创建方法
     */
    /*
     * @SuppressWarnings("unchecked") public static String
     * sendSMS(IfcFinaCreRepaySendMsg sms) { IfcAutoRepayMsgDao
     * ifcfinacrerepaysendmsgDao = (IfcAutoRepayMsgDao)
     * GlobalVal.ctx.getBean("ifcAutoRepayMsgDao"); MultiValueMap<String,
     * String> form = new LinkedMultiValueMap<String, String>();
     * form.add("interface_num", "SMS_OUT_003"); form.add("sys_num", "IFC");
     * form.add("user_id", "0"); form.add("tpl_id", sms.getMsg_code());
     * form.add("mobile", sms.getMobile_phone()); form.add("tpl_value",
     * sms.getParam_json()); form.add("num", ""); RestTemplate restTemplate =
     * new RestTemplate(); Map<String, Object> temp =
     * restTemplate.postForObject(PlatformGlobalVar.SYS_PROPERTIES
     * .get("ekp_login_url") + "modi/restful/simple", form, Map.class); if
     * (temp.get("flag").toString().equals("true")) { sms.setSend_result("1"); }
     * else { sms.setSend_result("0"); } ifcfinacrerepaysendmsgDao.save(sms);
     * return sms.getSend_result(); }
     */

    /**
     *
     * @Title: SendTemplateMsgByShortCode
     * @Description: 根据短工号进行微信消息推送
     * @param map
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author: Guanxu
     * @time:2018年8月1日 上午9:06:41
     * history:
     * 1、2018年8月1日 Guanxu 创建方法
     */
    public static String SendTemplateMsgByShortCode(Map<String, String> map) throws ClientProtocolException, IOException
    {
		HttpPost httpPost = new HttpPost(GlobalVal.getProperty("nozzleUrl"));
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        // 接口编号
        nvps.add(new BasicNameValuePair("interface_num", "MOA_OUT_SendTemplateMsgByShortCode"));
        nvps.add(new BasicNameValuePair("sys_num", "FOL"));
        // 模板id
        nvps.add(new BasicNameValuePair("template_id", map.get("template_id")));
        // 短工号
        nvps.add(new BasicNameValuePair("personnel_shortCode", map.get("personnel_shortCode")));
        // 具体传入参数数据
        nvps.add(new BasicNameValuePair("data", map.get("data")));

        httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = httpclient.execute(httpPost);
        try
        {
            // do something useful with the response body
            HttpEntity entity = response.getEntity();
            String str = EntityUtils.toString(entity);
            // and ensure it is fully consumed
            EntityUtils.consume(entity);
            Map<String, Object> temp = new Gson().fromJson(str, Map.class);
            // 判断
            if (temp.get("flag").toString().equals("true"))
            {
                return "1";
            }
            else
            {
                return "0";
            }
        }
        finally
        {
            response.close();
            httpclient.close();
        }
    }

    /**
     *
     * @Title: getVXmsgTemplateId
     * @Description: 获取资金专员微信模板ID
     * @return
     * @author: Guanxu
     * @time:2018年8月1日 上午9:34:51
     * history:
     * 1、2018年8月1日 Guanxu 创建方法
     *
     * 序号   模版ID    标题  一级行业    二级行业    操作
    1   -UdiBHkYeAk7FoyWYLWFqywebf2djfpUNYse99Q-yTg 债权更换提醒  金融业 证券|基金|理财|信托 详情   删除
    2   25dC0ZhTCaZnUfxNKzPgRZiFJFMonGdfp5PSgrepqgk 放款申请已通过通知   金融业 证券|基金|理财|信托 详情   删除
    3   8p9XHQZjeTVIS6E_CkEGPCfGsLf7_4T8gaiJixoYPFY 工作审批提醒  金融业 证券|基金|理财|信托 详情   删除
    4   Am-Y16nbubs8DDUGMBx6zE0N038d29EATtT2UAuFRZY 理财收益提醒  金融业 证券|基金|理财|信托 详情   删除
    5   LX3okB_MtRveyDyF1WlWOBxMopPNVWVm1XOn4FjoEUw 理财到期提醒  金融业 证券|基金|理财|信托 详情   删除
    6   mW1LxzcyprEsk3i_TPH30Dx4grEnPkRQiWhnfQvkBBE 到期还款提醒  金融业 证券|基金|理财|信托 详情   删除
     */
    public static String getVXmsgTemplateId()
    {
        String templateId = "";
        // 判断
		if ("1".equals(GlobalVal.getProperty("is_prod")))
        {
            // 生产 OCq1LJorFkdp5vLDRk3VrUxoozGToe_mYeiw7bPyw9M
			// templateId = "8p9XHQZjeTVIS6E_CkEGPCfGsLf7_4T8gaiJixoYPFY";
			templateId = GlobalVal.getProperty("VXtemplateIdProd");
        }
        else
        {
            // 测试环境
			// templateId = "zjT6E4Z-6CY-CdupGDPKl-PyrRLKGg8fU0M8Xs9zyC4";
			templateId = GlobalVal.getProperty("VXtemplateIdTest");
        }

        return templateId;
    }

    /**
     *
     * @Title: getFirstData
     * @Description: TODO(获取通用模板的通知时间)
     * @param app_name
     * @return
     * @author: Baisong
     * @time:2019年7月9日 下午3:54:04
     * history:
     * 1、2019年7月9日 Baisong 创建方法
     */
    public static String getNoticeTime()
    {
        Date now = new Date(System.currentTimeMillis());
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        return df.format(now);
    }

    /**
     *
     * @Title: SendTemplateMsgByShortCodeAsyn
     * @Description: 根据短工号进行微信消息推送--异步
     * @param map
     * @return
     * @throws ClientProtocolException
     * @throws IOException
     * @author: Guanxu
     * @time:2018年8月1日 上午9:06:41
     * history:
     * 1、2018年8月1日 Guanxu 创建方法
     */
    public static void SendTemplateMsgByShortCodeAsyn(Map<String, String> map)
    {
        Thread th = new Thread(new Runnable()
        {
            public void run()
            {
                try
                {
                    SendTemplateMsgByShortCode(map);
                }
                catch (Exception e)
                {
					e.printStackTrace();
                    e.getLocalizedMessage();
                }
            }
        });
        th.start();
    }

    /**
     *
     * @Title: removeFristStr
     * @Description: TODO(处理模板前面的您好字样)
     * @param app_name
     * @return
     * @author: Baisong
     * @time:2019年7月9日 下午3:54:04
     * history:
     * 1、2019年7月9日 Baisong 创建方法
     */
    public static String removeFristStr(String str)
    {
        String s = "您好,";
        String s1 = "您好，";
        int index = str.indexOf(s);
        int index1 = str.indexOf(s1);
        //判断
        if (index == 0 || index1 == 0)
        {
            str = str.replace(s, "");
            str = str.replace(s1, "");
        }
        return str;
    }

    /**
     * @Title: sendEmailInfo
     * @Description: TODO(发送邮件)
     * @param map
     * @return
     * @author: wuguoqiang
     * @time:2019年12月3日 上午10:49:16 history: 1、2019年9月4日 wuguoqiang 创建方法
     */
    @SuppressWarnings("unchecked")
    public static Map<String, Object> sendEmailInfo(Map<String, Object> map)
    {
        Map<String, Object> resMap = new HashMap<>();
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("interface_num", "MAIL_OUT_001"));
        nvps.add(new BasicNameValuePair("sys_num", "IFC"));

        nvps.add(new BasicNameValuePair("toAddress", map.get("customer_email").toString()));
        nvps.add(new BasicNameValuePair("content", map.get("email_content").toString()));
        nvps.add(new BasicNameValuePair("subject", map.get("email_subject").toString()));
        //判断
        if (map.get("attachFileMap") != null)
        {
            nvps.add(new BasicNameValuePair("attachFiles", new Gson().toJson(map.get("attachFileMap"))));
        }
        try
        {
            HttpPost httpPost = new HttpPost(GlobalVal.getProperty("nozzleUrl") + "/modi/restful/simple");
            httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));
            CloseableHttpClient httpclient = HttpClients.createDefault();
            CloseableHttpResponse response = httpclient.execute(httpPost);

            InputStreamReader reader = new InputStreamReader(response.getEntity().getContent(), "UTF-8");
            BufferedReader rd = new BufferedReader(reader);
            String result_str = rd.readLine();

            Gson gson = new Gson();
            resMap = gson.fromJson(result_str, Map.class);

        }
        catch (ConnectException e)
        {
            e.printStackTrace();
            resMap.put("ret_msg", "服务器链接错误，请联系客服！");
            resMap.put("ret_code", "003");
            return resMap;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            resMap.put("ret_msg", "连接平台出现 IOException");
            resMap.put("ret_code", "002");
            return resMap;
        }
        return resMap;
    }

}
